<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;
use \app\admin\controller\Base;

class Manager extends Base
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        $title = "管理员权限列表";

        // 获取数据库中的后台用户
        $data = \app\admin\model\Manager::select();

        return view("/manager/index",[
            'title'=> $title,
            'data' => $data
        ]);
    }

    // 管理员添加
    public function add()
    {
        $title = "管理员新增";

        // 控制权限分类
        $rule = \app\admin\model\Rule::select();

        return view("/manager/add",[
            'title' => $title,
            'rule' => $rule
        ]);
    }

    // 添加到数据库中
    public function insert(Request $request)
    {
        $data = $request->param();

        $rule = [
            'username|用户名' => 'require|token|min:5',
            'nickname|昵称' => 'require',
            'password|密码' => 'require|min:5|confirm',
            'email|邮箱' => 'require',
        ];

        $validate = new \think\Validate($rule);
        if(!$validate->check($data)){
            $error = $validate->getError();
            $this->error($error);
        }

        // 匹配数据库是否出现同样用户名
        $result = \app\admin\model\Manager::where("username",$data['username'])->select();

        if(!empty($result)){
            $this->error("账号已存在，请重新更换账号","admin/manager/add");
            die;
        }

        // 状态码验证字段
        $data['status'] = empty($data['status']) ? 0 : 1;
        # 获取当前时间
        $data['last_login_time'] = strtotime(date("Y-m-d h:i:s"));
        # 将密码改变成独有的MD5加密模式
        $data['password'] = md5Password($data['password']);
        $data['password_confirm'] = md5Password($data['password_confirm']);

        # 存入到数据库中
        \app\admin\model\Manager::create($data,true);

        $this->success("创建成功","admin/manager/index");
    }

    # 管理员修改
    public function edit(int $id)
    {

        if(empty($id)){
            $this->error("需要传递要修改的参数哦",'/admin/manager/index');
            die;
        }
        // 查询的一条数据
        $data = \app\admin\model\Manager::find($id);

        // title
        $title = "修改管理员";

        // 控制权限分类
        $rule = \app\admin\model\Rule::select();


        return view("/manager/edit",[
            "title" => $title,
            "data" => $data,
            'rule' => $rule
        ]);
    }

    # 管理员更新
    public function update(Request $request)
    {
        // 获取表单中的所有数据
        $data = $request->param();

        # 判断获取的数据中是否存在id
        if(empty($data['id'])){
            $this->error("您输入的方式有误","/admin/manager/index");
            die;
        }

        // 表单验证
        $rule = [
            'nickname|昵称' => "require|token",
            'email|邮箱' => 'require|email'
        ];

        $validate = new \think\Validate($rule);

        if(!$validate->check($data)){

            $error = $validate->getError();
            $this->error($error);
        }

        // 状态码验证字段
        $data['status'] = empty($data['status']) ? 0 : 1;

        // 最后更新的时间
        $data['last_login_time'] = strtotime(date("Y-m-d h:i:s"));

        // 更新字段
        \app\admin\model\Manager::update($data,['id'=>$data['id']],true);

        $this->success("修改成功","admin/manager/index");
    }

    # 删除管理员
    public function delete(int $id)
    {
        if(empty($id))
        {
            $this->error("操作有误，请重新操作","admin/manager/index");
            die;
        }
        # 软删除
        \app\admin\model\Manager::destroy($id);

        $this->success("删除成功","admin/manager/index");
    }

    # 修改密码
    public function upPwd(int $id)
    {
        if(empty($id)){
            $this->error("类型错误",'admin/manager/index');
            die;
        }
        #　获取所有数据
        $data = \app\admin\model\Manager::find($id);

        $title = "修改密码";

        return view("manager/uppwd",[
            'title' => $title,
            'data' => $data
        ]);
    }

    public function upPwddate(Request $request)
    {
        $data = $request->param();

        if(empty($data['id'])){

            $this->error("参数错误",'admin/manager/upPwd');
        }

        $data['oldpassword'] = md5Password($data['oldpassword']);

        # 进行新旧密码比对
        $result = \app\admin\model\Manager::where("password",$data['oldpassword'])->find($data['id']);

        $id = $data['id'];
        # 如果当前为null 则进入判断 原密码输入错误
        if(!isset($result)){

            $this->error("原密码输入错误，请重新输入",'admin/manager/upPwd?id='.$id );
            die;
        }

        // 开始进行新密码比对
        $rule = [
            'password|密码' => "require|token|confirm|min:5"
        ];

        $validate = new \think\Validate($rule);

        if(!$validate->check($data)){

            $error = $validate->getError();
            $this->error($error);
        }
        // 将更换的数据库进行加密处理
        $data['password'] = md5Password($data['password']);

        // 更新数据库
        \app\admin\model\Manager::update($data,['id'=>$data['id']],true);

        $this->success("修改成功","admin/manager/index");
    }
}
